#pragma once
//----------------------------------------------------------------------------------------------------------------
//			Filename:		BRDF.h
//			  Author:		Adrian De Barro
//			    Date:		12/08/2015
//----------------------------------------------------------------------------------------------------------------
//			  Status: READY
//----------------------------------------------------------------------------------------------------------------
#include "..\CoreClasses\Sampler\Sampler.h"
#include "..\CoreClasses\RGBObject\RGBColor.h"
#include "..\CollisionDetails\ShadeRec.h"
#include "..\CoreClasses\Point\Point3D\Point3D.h"

namespace Engine
{
	//----------------------------------------------------------------------------------------------------------------
	//			Class Name: BRDF
	//		   Description: Abstract class for the BRDF
	//----------------------------------------------------------------------------------------------------------------
	//			    Status: READY
	//----------------------------------------------------------------------------------------------------------------
	class BRDF
	{
	public:
		//----------------------------------------------------------------------------------------------------------------
		//		 Method Name: f
		//		Return Value: VOID
		//		  Parameters: Collision Details, Input direction, output direction, Use texture
		//			  Status: READY
		//----------------------------------------------------------------------------------------------------------------
		virtual RGBColor f(ShadeRec& sr, Point3D wi, Point3D w0, RGBColor& p_colorAtPoint, bool usesTexture) = 0;
		//----------------------------------------------------------------------------------------------------------------
		//		 Method Name: sampleF
		//		Return Value: VOID
		//		  Parameters: Collision Details, Input direction, output direction
		//			  Status: READY
		//----------------------------------------------------------------------------------------------------------------
		virtual RGBColor sampleF(ShadeRec& sr, Point3D wi, Point3D w0) = 0;
		//----------------------------------------------------------------------------------------------------------------
		//		 Method Name: rho
		//		Return Value: VOID
		//		  Parameters: Collision Details, output direction
		//			  Status: READY
		//----------------------------------------------------------------------------------------------------------------
		virtual RGBColor rho(ShadeRec& sr, Point3D w0) = 0;
	private:
		Sampler* m_samplePtr;
	};
}
